/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package compevol;

//import java.util.Vector; 
import java.util.Vector;

/**
 *
 * @author vitor
 */
public class SelecaoTorneio implements Selecao {

    //elementos selecionados devem ser retirados do vetor de individuos da populacao inicial
    public Vector<Individuo> seleciona(Populacao inicial, int numeroPais) {
        //Vector<Individuo> populacaoInicial = inicial.individuos;
        Vector<Individuo> pais = new Vector<Individuo>();// inicial.individuos;

        for (int i = 0; i < numeroPais; i++) {
            //faz torneio entre 5 individuos:
            final int numIndividuosTorneios = 5;
            //int[] individuos = new int[numIndividuosTorneios];
            int melhorId = -1;
            double melhorAvaliacao = Integer.MAX_VALUE; //pega a pior avaliacao
            
            //pega n individuos aleatorios (pode repetir individuos no mesmo torneio)
            for (int j = 0; j < numIndividuosTorneios; j++) {
                int novoId = (int) (Math.random() * inicial.individuos.size());
                double avaliacao = inicial.config.funcao.avalia(inicial.individuos.get(novoId));
                //verifica se individuo escolhido eh melhor q anterior
                if (avaliacao <= melhorAvaliacao) {
                    melhorAvaliacao = avaliacao;
                    melhorId = novoId;
                }
            }

            //insere melhor individo no vetor de pais:
            pais.add(inicial.individuos.get(melhorId));

            //remove individuo da populacao para nao ser escolhido denovo:
            inicial.individuos.remove(melhorId);
        }

        
        return pais;
    }

    @Override
    public String toString() {
        return "Torneio";
    }
}
